#ifndef MY_DEVICE_H
#define MY_DEVICE_H

#include "pinctrl.h"
#include "gpio.h"
#include "platform_core_rom.h"
#include "uart.h"
#include "osal_debug.h"
#include "soc_osal.h"
#include "app_init.h"
#include "string.h"
#include "cmsis_os2.h"

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SENSOR_IO GPIO_10
#define UART_DATA_RECV_SIZE 50
#define MAX_FIELD_LEN 5  // 字段最大长度（包含结束符）
#define SEND_CON "%sfF:%s,wF:%s,sF:%s,swF:%s,r:%s,g:%s,b:%s,"
typedef struct {
    char id[MAX_FIELD_LEN];          // 设备ID
    char fanFlag[MAX_FIELD_LEN];     // 风扇状态
    char waterFlag[MAX_FIELD_LEN];   // 水泵状态
    char sunFlag[MAX_FIELD_LEN];     // 补光灯状态
    char switchFlag[MAX_FIELD_LEN];  // 总开关
    char colorNum[3][MAX_FIELD_LEN]; // RGB颜色值
} ControlState;
typedef struct SensorData
{
    char ligBuffer[10];
    char humidity[10];
    char temperature[10];
    char soilHum[10];
    char uv[10];
    char rain[10];
    char co2[10];
    int id;
}SensorData;
void my_gpio_init(pin_t gpio);

gpio_level_t my_io_readval(pin_t gpio);
void print_sensor_data(const SensorData *data) ;
void my_io_setval(pin_t gpio, gpio_level_t level);
void uart_gpio_init(uint16_t uart_bus,uint16_t uart_tx,uint16_t uart_rx );

void uart_init_config(uint16_t uart_bus,uint16_t uart_tx,uint16_t uart_rx,uart_buffer_config_t* buff_config);


/*****************************************

主要功能：拼接通过lora发送的控制数据
参数列表：state，状态，output输出，max_len长度sizeof(output)
返回值：空

*****************************************/
void build_message(const ControlState *state, char *output, size_t max_len);
void print_control_state(const ControlState *state);
void update_device_data(SensorData *device, const SensorData *new_data);
void update_con_data(ControlState *con, const ControlState *new_data);
// void parse_control_message(ControlState* state, const char *msg);
void parse_control_message(ControlState *state, const char *message);
int send_command_and_wait_response(const char *req, size_t req_len, 
                                  uint8_t *response, size_t max_response_len,
                                  int max_attempts);
#endif